home *** CD-ROM | disk | FTP | other *** search
/ Games of Daze / Infomagic - Games of Daze (Summer 1995) (Disc 1 of 2).iso / djgpp / docs / make / make.i7 < prev    next >
Encoding:
GNU Info File  |  1994-07-27  |  16.8 KB  |  505 lines

  1. This is Info file make.info, produced by Makeinfo-1.54 from the input
  2. file ./make.texinfo.
  3.  
  4.    This file documents the GNU Make utility, which determines
  5. automatically which pieces of a large program need to be recompiled,
  6. and issues the commands to recompile them.
  7.  
  8.    This is Edition 0.45, last updated 11 May 1994, of `The GNU Make
  9. Manual', for `make', Version 3.71 Beta.
  10.  
  11.    Copyright (C) 1988, '89, '90, '91, '92, '93, '94 Free Software
  12. Foundation, Inc.
  13.  
  14.    Permission is granted to make and distribute verbatim copies of this
  15. manual provided the copyright notice and this permission notice are
  16. preserved on all copies.
  17.  
  18.    Permission is granted to copy and distribute modified versions of
  19. this manual under the conditions for verbatim copying, provided that
  20. the entire resulting derived work is distributed under the terms of a
  21. permission notice identical to this one.
  22.  
  23.    Permission is granted to copy and distribute translations of this
  24. manual into another language, under the above conditions for modified
  25. versions, except that this permission notice may be stated in a
  26. translation approved by the Free Software Foundation.
  27.  
  28. 
  29. File: make.info,  Node: Quick Reference,  Next: Complex Makefile,  Prev: Makefile Conventions,  Up: Top
  30.  
  31. Quick Reference
  32. ***************
  33.  
  34.    This appendix summarizes the directives, text manipulation functions,
  35. and special variables which GNU `make' understands.  *Note Special
  36. Targets::, *Note Catalogue of Implicit Rules: Catalogue of Rules, and
  37. *Note Summary of Options: Options Summary, for other summaries.
  38.  
  39.    Here is a summary of the directives GNU `make' recognizes:
  40.  
  41. `define VARIABLE'
  42. `endef'
  43.      Define a multi-line, recursively-expanded variable.
  44.      *Note Sequences::.
  45.  
  46. `ifdef VARIABLE'
  47. `ifndef VARIABLE'
  48. `ifeq (A,B)'
  49. `ifeq "A" "B"'
  50. `ifeq 'A' 'B''
  51. `ifneq (A,B)'
  52. `ifneq "A" "B"'
  53. `ifneq 'A' 'B''
  54. `else'
  55. `endif'
  56.      Conditionally evaluate part of the makefile.
  57.      *Note Conditionals::.
  58.  
  59. `include FILE'
  60.      Include another makefile.
  61.      *Note Including Other Makefiles: Include.
  62.  
  63. `override VARIABLE = VALUE'
  64. `override VARIABLE := VALUE'
  65. `override VARIABLE += VALUE'
  66. `override define VARIABLE'
  67. `endef'
  68.      Define a variable, overriding any previous definition, even one
  69.      from the command line.
  70.      *Note The `override' Directive: Override Directive.
  71.  
  72. `export'
  73.      Tell `make' to export all variables to child processes by default.
  74.      *Note Communicating Variables to a Sub-`make': Variables/Recursion.
  75.  
  76. `export VARIABLE'
  77. `export VARIABLE = VALUE'
  78. `export VARIABLE := VALUE'
  79. `export VARIABLE += VALUE'
  80. `unexport VARIABLE'
  81.      Tell `make' whether or not to export a particular variable to child
  82.      processes.
  83.      *Note Communicating Variables to a Sub-`make': Variables/Recursion.
  84.  
  85. `vpath PATTERN PATH'
  86.      Specify a search path for files matching a `%' pattern.
  87.      *Note The `vpath' Directive: Selective Search.
  88.  
  89. `vpath PATTERN'
  90.      Remove all search paths previously specified for PATTERN.
  91.  
  92. `vpath'
  93.      Remove all search paths previously specified in any `vpath'
  94.      directive.
  95.  
  96.    Here is a summary of the text manipulation functions (*note
  97. Functions::.):
  98.  
  99. `$(subst FROM,TO,TEXT)'
  100.      Replace FROM with TO in TEXT.
  101.      *Note Functions for String Substitution and Analysis: Text
  102.      Functions.
  103.  
  104. `$(patsubst PATTERN,REPLACEMENT,TEXT)'
  105.      Replace words matching PATTERN with REPLACEMENT in TEXT.
  106.      *Note Functions for String Substitution and Analysis: Text
  107.      Functions.
  108.  
  109. `$(strip STRING)'
  110.      Remove excess whitespace characters from STRING.
  111.      *Note Functions for String Substitution and Analysis: Text
  112.      Functions.
  113.  
  114. `$(findstring FIND,TEXT)'
  115.      Locate FIND in TEXT.
  116.      *Note Functions for String Substitution and Analysis: Text
  117.      Functions.
  118.  
  119. `$(filter PATTERN...,TEXT)'
  120.      Select words in TEXT that match one of the PATTERN words.
  121.      *Note Functions for String Substitution and Analysis: Text
  122.      Functions.
  123.  
  124. `$(filter-out PATTERN...,TEXT)'
  125.      Select words in TEXT that *do not* match any of the PATTERN words.
  126.      *Note Functions for String Substitution and Analysis: Text
  127.      Functions.
  128.  
  129. `$(sort LIST)'
  130.      Sort the words in LIST lexicographically, removing duplicates.
  131.      *Note Functions for String Substitution and Analysis: Text
  132.      Functions.
  133.  
  134. `$(dir NAMES...)'
  135.      Extract the directory part of each file name.
  136.      *Note Functions for File Names: Filename Functions.
  137.  
  138. `$(notdir NAMES...)'
  139.      Extract the non-directory part of each file name.
  140.      *Note Functions for File Names: Filename Functions.
  141.  
  142. `$(suffix NAMES...)'
  143.      Extract the suffix (the last `.' and following characters) of each
  144.      file name.
  145.      *Note Functions for File Names: Filename Functions.
  146.  
  147. `$(basename NAMES...)'
  148.      Extract the base name (name without suffix) of each file name.
  149.      *Note Functions for File Names: Filename Functions.
  150.  
  151. `$(addsuffix SUFFIX,NAMES...)'
  152.      Append SUFFIX to each word in NAMES.
  153.      *Note Functions for File Names: Filename Functions.
  154.  
  155. `$(addprefix PREFIX,NAMES...)'
  156.      Prepend PREFIX to each word in NAMES.
  157.      *Note Functions for File Names: Filename Functions.
  158.  
  159. `$(join LIST1,LIST2)'
  160.      Join two parallel lists of words.
  161.      *Note Functions for File Names: Filename Functions.
  162.  
  163. `$(word N,TEXT)'
  164.      Extract the Nth word (one-origin) of TEXT.
  165.      *Note Functions for File Names: Filename Functions.
  166.  
  167. `$(words TEXT)'
  168.      Count the number of words in TEXT.
  169.      *Note Functions for File Names: Filename Functions.
  170.  
  171. `$(firstword NAMES...)'
  172.      Extract the first word of NAMES.
  173.      *Note Functions for File Names: Filename Functions.
  174.  
  175. `$(wildcard PATTERN...)'
  176.      Find file names matching a shell file name pattern (*not* a `%'
  177.      pattern).
  178.      *Note The Function `wildcard': Wildcard Function.
  179.  
  180. `$(shell COMMAND)'
  181.      Execute a shell command and return its output.
  182.      *Note The `shell' Function: Shell Function.
  183.  
  184. `$(origin VARIABLE)'
  185.      Return a string describing how the `make' variable VARIABLE was
  186.      defined.
  187.      *Note The `origin' Function: Origin Function.
  188.  
  189. `$(foreach VAR,WORDS,TEXT)'
  190.      Evaluate TEXT with VAR bound to each word in WORDS, and
  191.      concatenate the results.
  192.      *Note The `foreach' Function: Foreach Function.
  193.  
  194.    Here is a summary of the automatic variables.  *Note Automatic
  195. Variables: Automatic, for full information.
  196.  
  197. `$@'
  198.      The file name of the target.
  199.  
  200. `$%'
  201.      The target member name, when the target is an archive member.
  202.  
  203. `$<'
  204.      The name of the first dependency.
  205.  
  206. `$?'
  207.      The names of all the dependencies that are newer than the target,
  208.      with spaces between them.  For dependencies which are archive
  209.      members, only the member named is used (*note Archives::.).
  210.  
  211. `$^'
  212.      The names of all the dependencies, with spaces between them.  For
  213.      dependencies which are archive members, only the member named is
  214.      used (*note Archives::.).
  215.  
  216. `$*'
  217.      The stem with which an implicit rule matches (*note How Patterns
  218.      Match: Pattern Match.).
  219.  
  220. `$(@D)'
  221. `$(@F)'
  222.      The directory part and the file-within-directory part of `$@'.
  223.  
  224. `$(*D)'
  225. `$(*F)'
  226.      The directory part and the file-within-directory part of `$*'.
  227.  
  228. `$(%D)'
  229. `$(%F)'
  230.      The directory part and the file-within-directory part of `$%'.
  231.  
  232. `$(<D)'
  233. `$(<F)'
  234.      The directory part and the file-within-directory part of `$<'.
  235.  
  236. `$(^D)'
  237. `$(^F)'
  238.      The directory part and the file-within-directory part of `$^'.
  239.  
  240. `$(?D)'
  241. `$(?F)'
  242.      The directory part and the file-within-directory part of `$?'.
  243.  
  244.    These variables are used specially by GNU `make':
  245.  
  246. `MAKEFILES'
  247.      Makefiles to be read on every invocation of `make'.
  248.      *Note The Variable `MAKEFILES': MAKEFILES Variable.
  249.  
  250. `VPATH'
  251.      Directory search path for files not found in the current directory.
  252.      *Note `VPATH' Search Path for All Dependencies: General Search.
  253.  
  254. `SHELL'
  255.      The name of the system default command interpreter, usually
  256.      `/bin/sh'.  You can set `SHELL' in the makefile to change the
  257.      shell used to run commands.  *Note Command Execution: Execution.
  258.  
  259. `MAKE'
  260.      The name with which `make' was invoked.  Using this variable in
  261.      commands has special meaning.  *Note How the `MAKE' Variable
  262.      Works: MAKE Variable.
  263.  
  264. `MAKELEVEL'
  265.      The number of levels of recursion (sub-`make's).
  266.      *Note Variables/Recursion::.
  267.  
  268. `MAKEFLAGS'
  269.      The flags given to `make'.  You can set this in the environment or
  270.      a makefile to set flags.
  271.      *Note Communicating Options to a Sub-`make': Options/Recursion.
  272.  
  273. `SUFFIXES'
  274.      The default list of suffixes before `make' reads any makefiles.
  275.  
  276. 
  277. File: make.info,  Node: Complex Makefile,  Next: Concept Index,  Prev: Quick Reference,  Up: Top
  278.  
  279. Complex Makefile Example
  280. ************************
  281.  
  282.    Here is the makefile for the GNU `tar' program.  This is a
  283. moderately complex makefile.
  284.  
  285.    Because it is the first target, the default goal is `all'.  An
  286. interesting feature of this makefile is that `testpad.h' is a source
  287. file automatically created by the `testpad' program, itself compiled
  288. from `testpad.c'.
  289.  
  290.    If you type `make' or `make all', then `make' creates the `tar'
  291. executable, the `rmt' daemon that provides remote tape access, and the
  292. `tar.info' Info file.
  293.  
  294.    If you type `make install', then `make' not only creates `tar',
  295. `rmt', and `tar.info', but also installs them.
  296.  
  297.    If you type `make clean', then `make' removes the `.o' files, and
  298. the `tar', `rmt', `testpad', `testpad.h', and `core' files.
  299.  
  300.    If you type `make distclean', then `make' not only removes the same
  301. files as does `make clean' but also the `TAGS', `Makefile', and
  302. `config.status' files.  (Although it is not evident, this makefile (and
  303. `config.status') is generated by the user with the `configure' program,
  304. which is provided in the `tar' distribution, but is not shown here.)
  305.  
  306.    If you type `make realclean', then `make' removes the same files as
  307. does `make distclean' and also removes the Info files generated from
  308. `tar.texinfo'.
  309.  
  310.    In addition, there are targets `shar' and `dist' that create
  311. distribution kits.
  312.  
  313.      # Generated automatically from Makefile.in by configure.
  314.      # Un*x Makefile for GNU tar program.
  315.      # Copyright (C) 1991 Free Software Foundation, Inc.
  316.      
  317.      # This program is free software; you can redistribute
  318.      # it and/or modify it under the terms of the GNU
  319.      # General Public License ...
  320.      ...
  321.      ...
  322.      
  323.      SHELL = /bin/sh
  324.      
  325.      #### Start of system configuration section. ####
  326.      
  327.      srcdir = .
  328.      
  329.      # If you use gcc, you should either run the
  330.      # fixincludes script that comes with it or else use
  331.      # gcc with the -traditional option.  Otherwise ioctl
  332.      # calls will be compiled incorrectly on some systems.
  333.      CC = gcc -O
  334.      YACC = bison -y
  335.      INSTALL = /usr/local/bin/install -c
  336.      INSTALLDATA = /usr/local/bin/install -c -m 644
  337.      
  338.      # Things you might add to DEFS:
  339.      # -DSTDC_HEADERS        If you have ANSI C headers and
  340.      #                       libraries.
  341.      # -DPOSIX               If you have POSIX.1 headers and
  342.      #                       libraries.
  343.      # -DBSD42               If you have sys/dir.h (unless
  344.      #                       you use -DPOSIX), sys/file.h,
  345.      #                       and st_blocks in `struct stat'.
  346.      # -DUSG                 If you have System V/ANSI C
  347.      #                       string and memory functions
  348.      #                       and headers, sys/sysmacros.h,
  349.      #                       fcntl.h, getcwd, no valloc,
  350.      #                       and ndir.h (unless
  351.      #                       you use -DDIRENT).
  352.      # -DNO_MEMORY_H         If USG or STDC_HEADERS but do not
  353.      #                       include memory.h.
  354.      # -DDIRENT              If USG and you have dirent.h
  355.      #                       instead of ndir.h.
  356.      # -DSIGTYPE=int         If your signal handlers
  357.      #                       return int, not void.
  358.      # -DNO_MTIO             If you lack sys/mtio.h
  359.      #                       (magtape ioctls).
  360.      # -DNO_REMOTE           If you do not have a remote shell
  361.      #                       or rexec.
  362.      # -DUSE_REXEC           To use rexec for remote tape
  363.      #                       operations instead of
  364.      #                       forking rsh or remsh.
  365.      # -DVPRINTF_MISSING     If you lack vprintf function
  366.      #                       (but have _doprnt).
  367.      # -DDOPRNT_MISSING      If you lack _doprnt function.
  368.      #                       Also need to define
  369.      #                       -DVPRINTF_MISSING.
  370.      # -DFTIME_MISSING       If you lack ftime system call.
  371.      # -DSTRSTR_MISSING      If you lack strstr function.
  372.      # -DVALLOC_MISSING      If you lack valloc function.
  373.      # -DMKDIR_MISSING       If you lack mkdir and
  374.      #                       rmdir system calls.
  375.      # -DRENAME_MISSING      If you lack rename system call.
  376.      # -DFTRUNCATE_MISSING   If you lack ftruncate
  377.      #                       system call.
  378.      # -DV7                  On Version 7 Unix (not
  379.      #                       tested in a long time).
  380.      # -DEMUL_OPEN3          If you lack a 3-argument version
  381.      #                       of open, and want to emulate it
  382.      #                       with system calls you do have.
  383.      # -DNO_OPEN3            If you lack the 3-argument open
  384.      #                       and want to disable the tar -k
  385.      #                       option instead of emulating open.
  386.      # -DXENIX               If you have sys/inode.h
  387.      #                       and need it 94 to be included.
  388.      
  389.      DEFS =  -DSIGTYPE=int -DDIRENT -DSTRSTR_MISSING \
  390.              -DVPRINTF_MISSING -DBSD42
  391.      # Set this to rtapelib.o unless you defined NO_REMOTE,
  392.      # in which case make it empty.
  393.      RTAPELIB = rtapelib.o
  394.      LIBS =
  395.      DEF_AR_FILE = /dev/rmt8
  396.      DEFBLOCKING = 20
  397.      
  398.      CDEBUG = -g
  399.      CFLAGS = $(CDEBUG) -I. -I$(srcdir) $(DEFS) \
  400.              -DDEF_AR_FILE=\"$(DEF_AR_FILE)\" \
  401.              -DDEFBLOCKING=$(DEFBLOCKING)
  402.      LDFLAGS = -g
  403.      
  404.      prefix = /usr/local
  405.      # Prefix for each installed program,
  406.      # normally empty or `g'.
  407.      binprefix =
  408.      
  409.      # The directory to install tar in.
  410.      bindir = $(prefix)/bin
  411.      
  412.      # The directory to install the info files in.
  413.      infodir = $(prefix)/info
  414.      
  415.      #### End of system configuration section. ####
  416.      
  417.      SRC1 =  tar.c create.c extract.c buffer.c \
  418.              getoldopt.c update.c gnu.c mangle.c
  419.      SRC2 =  version.c list.c names.c diffarch.c \
  420.              port.c wildmat.c getopt.c
  421.      SRC3 =  getopt1.c regex.c getdate.y
  422.      SRCS =  $(SRC1) $(SRC2) $(SRC3)
  423.      OBJ1 =  tar.o create.o extract.o buffer.o \
  424.              getoldopt.o update.o gnu.o mangle.o
  425.      OBJ2 =  version.o list.o names.o diffarch.o \
  426.              port.o wildmat.o getopt.o
  427.      OBJ3 =  getopt1.o regex.o getdate.o $(RTAPELIB)
  428.      OBJS =  $(OBJ1) $(OBJ2) $(OBJ3)
  429.      AUX =   README COPYING ChangeLog Makefile.in  \
  430.              makefile.pc configure configure.in \
  431.              tar.texinfo tar.info* texinfo.tex \
  432.              tar.h port.h open3.h getopt.h regex.h \
  433.              rmt.h rmt.c rtapelib.c alloca.c \
  434.              msd_dir.h msd_dir.c tcexparg.c \
  435.              level-0 level-1 backup-specs testpad.c
  436.      
  437.      all:    tar rmt tar.info
  438.      
  439.      tar:    $(OBJS)
  440.              $(CC) $(LDFLAGS) -o $@ $(OBJS) $(LIBS)
  441.      
  442.      rmt:    rmt.c
  443.              $(CC) $(CFLAGS) $(LDFLAGS) -o $@ rmt.c
  444.      
  445.      tar.info: tar.texinfo
  446.              makeinfo tar.texinfo
  447.      
  448.      install: all
  449.              $(INSTALL) tar $(bindir)/$(binprefix)tar
  450.              -test ! -f rmt || $(INSTALL) rmt /etc/rmt
  451.              $(INSTALLDATA) $(srcdir)/tar.info* $(infodir)
  452.      
  453.      $(OBJS): tar.h port.h testpad.h
  454.      regex.o buffer.o tar.o: regex.h
  455.      # getdate.y has 8 shift/reduce conflicts.
  456.      
  457.      testpad.h: testpad
  458.              ./testpad
  459.      
  460.      testpad: testpad.o
  461.              $(CC) -o $@ testpad.o
  462.      
  463.      TAGS:   $(SRCS)
  464.              etags $(SRCS)
  465.      
  466.      clean:
  467.              rm -f *.o tar rmt testpad testpad.h core
  468.      
  469.      distclean: clean
  470.              rm -f TAGS Makefile config.status
  471.      
  472.      realclean: distclean
  473.              rm -f tar.info*
  474.      
  475.      shar: $(SRCS) $(AUX)
  476.              shar $(SRCS) $(AUX) | compress \
  477.                > tar-`sed -e '/version_string/!d' \
  478.                           -e 's/[^0-9.]*\([0-9.]*\).*/\1/' \
  479.                           -e q
  480.                           version.c`.shar.Z
  481.      
  482.      dist: $(SRCS) $(AUX)
  483.              echo tar-`sed \
  484.                   -e '/version_string/!d' \
  485.                   -e 's/[^0-9.]*\([0-9.]*\).*/\1/' \
  486.                   -e q
  487.                   version.c` > .fname
  488.              -rm -rf `cat .fname`
  489.              mkdir `cat .fname`
  490.              ln $(SRCS) $(AUX) `cat .fname`
  491.              -rm -rf `cat .fname` .fname
  492.              tar chZf `cat .fname`.tar.Z `cat .fname`
  493.      
  494.      tar.zoo: $(SRCS) $(AUX)
  495.              -rm -rf tmp.dir
  496.              -mkdir tmp.dir
  497.              -rm tar.zoo
  498.              for X in $(SRCS) $(AUX) ; do \
  499.                  echo $$X ; \
  500.                  sed 's/$$/^M/' $$X \
  501.                  > tmp.dir/$$X ; done
  502.              cd tmp.dir ; zoo aM ../tar.zoo *
  503.              -rm -rf tmp.dir
  504.  
  505.